<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <title>向连接池中添加一个memcache服务器</title>
<link media="all" rel="stylesheet" type="text/css" href="styles/03e73060321a0a848018724a6c83de7f-theme-base.css" />
<link media="all" rel="stylesheet" type="text/css" href="styles/03e73060321a0a848018724a6c83de7f-theme-medium.css" />

 </head>
 <body class="docs"><div class="navbar navbar-fixed-top">
  <div class="navbar-inner clearfix">
    <ul class="nav" style="width: 100%">
      <li style="float: left;"><a href="memcache.add.html">« Memcache::add</a></li>
      <li style="float: right;"><a href="memcache.close.html">Memcache::close »</a></li>
    </ul>
  </div>
</div>
<div id="breadcrumbs" class="clearfix">
  <ul class="breadcrumbs-container">
    <li><a href="index.html">PHP Manual</a></li>
    <li><a href="class.memcache.html">Memcache</a></li>
    <li>向连接池中添加一个memcache服务器</li>
  </ul>
</div>
<div id="layout">
  <div id="layout-content"><div id="memcache.addserver" class="refentry">
 <div class="refnamediv">
  <h1 class="refname">Memcache::addServer</h1>
  <p class="verinfo">(PECL memcache &gt;= 2.0.0)</p><p class="refpurpose"><span class="refname">Memcache::addServer</span> &mdash; <span class="dc-title">向连接池中添加一个memcache服务器</span></p>

 </div>
 
 <div class="refsect1 description" id="refsect1-memcache.addserver-description">
  <h3 class="title">说明</h3>
  <div class="methodsynopsis dc-description">
   <span class="methodname"><strong>Memcache::addServer</strong></span>(<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type">string</span> <code class="parameter">$host</code></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type">int</span> <code class="parameter">$port</code><span class="initializer"> = 11211</span></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type">bool</span> <code class="parameter">$persistent</code><span class="initializer"> = ?</span></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type">int</span> <code class="parameter">$weight</code><span class="initializer"> = ?</span></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type">int</span> <code class="parameter">$timeout</code><span class="initializer"> = ?</span></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type">int</span> <code class="parameter">$retry_interval</code><span class="initializer"> = ?</span></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type">bool</span> <code class="parameter">$status</code><span class="initializer"> = ?</span></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type"><span class="type callback">callback</span></span> <code class="parameter">$failure_callback</code><span class="initializer"> = ?</span></span>,<br>&nbsp;&nbsp;&nbsp;&nbsp;<span class="methodparam"><span class="type">int</span> <code class="parameter">$timeoutms</code><span class="initializer"> = ?</span></span><br>): <span class="type">bool</span></div>

  
  <p class="para rdfs-comment">
   <span class="function"><strong>Memcache::addServer()</strong></span>增加一个服务器到连接池中。通过<span class="function"><strong>Memcache::addServer()</strong></span>
   打开的连接将会在脚本执行结束后自动关闭，也可以使用<span class="function"><a href="memcache.close.html" class="function">Memcache::close()</a></span>进行手动关闭。 
   您也可以使用<span class="function"><strong>memcache_add_server()</strong></span>来添加服务器。
  </p>
  
  <p class="para">
   当使用这个方法的时候(与<span class="function"><a href="memcache.connect.html" class="function">Memcache::connect()</a></span>和<span class="function"><a href="memcache.pconnect.html" class="function">Memcache::pconnect()</a></span>相反)
   网络连接并不会立刻建立，而是直到真正使用的时候才建立。 因此在加入大量服务器到连接池中时也是没有开销的，因为它们可能并不会被使用。
  </p>
  
  <p class="para">
  故障转移可能在方法的任何一个层次发生，通常只要其他服务器可用用户就不会感受到。任何的socket或memcache服务器级别的错误
  （比如内存溢出）都可能导致故障转移。而一般的客户端错误比如使用Memcache::add尝试增加一个已经存在的key则不会导致故障转移。
  </p>

  <blockquote class="note"><p><strong class="note">注意</strong>: 
   <p class="para">
    这个方法在2.0.0版本加入Memcache。
   </p>
  </p></blockquote>

 </div>


 <div class="refsect1 parameters" id="refsect1-memcache.addserver-parameters">
  <h3 class="title">参数</h3>
  <p class="para">
   <dl>
    
     <dt>
<code class="parameter">host</code></dt>

     <dd>

      <p class="para">
      要连接的memcached服务端监听的主机位置。这个参数通常指定其他类型的传输比如Unix域套接字使用
      <code class="literal">unix:///path/to/memcached.sock</code>，这种情况下参数<code class="parameter">port</code>
       必须设置为<code class="literal">0</code>。
      </p>
     </dd>

    
    
     <dt>
<code class="parameter">port</code></dt>

     <dd>

      <p class="para">
      要连接的memcached服务端监听的端口。当使用UNIX域套接字连接时设置为<code class="literal">0</code>。
      </p>
     </dd>

    
    
     <dt>
<code class="parameter">persistent</code></dt>

     <dd>

      <p class="para">
      控制是否使用持久化连接。默认<strong><code>true</code></strong>。
      </p>
     </dd>

    
    
     <dt>
<code class="parameter">weight</code></dt>

     <dd>

      <p class="para">
      为此服务器创建的桶的数量，用来控制此服务器被选中的权重，单个服务器被选中的概率是相对于所有服务器weight总和而言的。
      </p>
     </dd>

    
    
     <dt>
<code class="parameter">timeout</code></dt>

     <dd>

      <p class="para">
      连接持续（超时）时间（单位秒），默认值1秒，修改此值之前请三思，过长的连接持续时间可能会导致失去所有的缓存优势。
      </p>
     </dd>

    
    
     <dt>
<code class="parameter">retry_interval</code></dt>

     <dd>

      <p class="para">
      服务器连接失败时重试的间隔时间，默认值15秒。如果此参数设置为-1表示不重试。此参数和<code class="parameter">persistent</code>参数在扩展以
      <span class="function"><a href="function.dl.html" class="function">dl()</a></span>函数动态加载的时候无效。
      </p>
      <p class="para">
      每个失败的连接结构有自己的超时时间，并且在它失效之前选择后端服务请求时该结构会被跳过。一旦一个连接失效，
      它将会被成功重新连接或被标记为失败连接以在下一个<code class="parameter">retry_interval</code>秒重连。
      典型的影响是每个web服务子进程在服务于一个页面时将会每<code class="parameter">retry_interval</code>秒
      尝试重新连接一次。
      </p>
     </dd>

    
    
     <dt>
<code class="parameter">status</code></dt>

     <dd>

      <p class="para">
      控制此服务器是否可以被标记为在线状态。设置此参数值为<strong><code>false</code></strong>并且<code class="parameter">retry_interval</code>参数
      设置为-1时允许将失败的服务器保留在一个池中以免影响key的分配算法。对于这个服务器的请求会进行故障转移或者立即失败，
      这受限于<code class="parameter">memcache.allow_failover</code>参数的设置。该参数默认<strong><code>true</code></strong>，表明允许进行故障转移。
      </p>
     </dd>

    
    
     <dt>
<code class="parameter">failure_callback</code></dt>

     <dd>

      <p class="para">
      允许用户指定一个运行时发生错误后的回调函数。回调函数会在故障转移之前运行。回调函数会接受到两个参数，分别是失败主机的
      主机名和端口号。
      </p>
     </dd>

    
    
     <dt>
<code class="parameter">timeoutms</code></dt>

     <dd>

      <p class="para">
       
      </p>
     </dd>

    
   </dl>

  </p>
 </div>


 <div class="refsect1 returnvalues" id="refsect1-memcache.addserver-returnvalues">
  <h3 class="title">返回值</h3>
  <p class="para">
   成功时返回 <strong><code>true</code></strong>， 或者在失败时返回 <strong><code>false</code></strong>。
  </p>
 </div>


 <div class="refsect1 examples" id="refsect1-memcache.addserver-examples">
  <h3 class="title">范例</h3>
  <p class="para">
   <div class="example" id="example-4361">
    <p><strong>示例 #1 <span class="function"><strong>Memcache::addServer()</strong></span> 示例</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #FF8000">/*&nbsp;OO&nbsp;API&nbsp;*/<br /><br /></span><span style="color: #0000BB">$memcache&nbsp;</span><span style="color: #007700">=&nbsp;new&nbsp;</span><span style="color: #0000BB">Memcache</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$memcache</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">addServer</span><span style="color: #007700">(</span><span style="color: #DD0000">'memcache_host'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">11211</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$memcache</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">addServer</span><span style="color: #007700">(</span><span style="color: #DD0000">'memcache_host2'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">11211</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">/*&nbsp;procedural&nbsp;API&nbsp;*/<br /><br /></span><span style="color: #0000BB">$memcache_obj&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">memcache_connect</span><span style="color: #007700">(</span><span style="color: #DD0000">'memcache_host'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">11211</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">memcache_add_server</span><span style="color: #007700">(</span><span style="color: #0000BB">$memcache_obj</span><span style="color: #007700">,&nbsp;</span><span style="color: #DD0000">'memcache_host2'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">11211</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">?&gt;</span>
</span>
</code></div>
    </div>

   </div>
  </p>
 </div>


 <div class="refsect1 seealso" id="refsect1-memcache.addserver-seealso">
  <h3 class="title">参见</h3>
  <p class="para">
   <ul class="simplelist">
    <li class="member"><span class="function"><a href="memcache.connect.html" class="function" rel="rdfs-seeAlso">Memcache::connect()</a> - 打开一个memcached服务端连接</span></li>
    <li class="member"><span class="function"><a href="memcache.pconnect.html" class="function" rel="rdfs-seeAlso">Memcache::pconnect()</a> - 打开一个到服务器的持久化连接</span></li>
    <li class="member"><span class="function"><a href="memcache.close.html" class="function" rel="rdfs-seeAlso">Memcache::close()</a> - 关闭memcache连接</span></li>
    <li class="member"><span class="function"><a href="memcache.setserverparams.html" class="function" rel="rdfs-seeAlso">Memcache::setServerParams()</a> - 运行时修改服务器参数和状态</span></li>
    <li class="member"><span class="function"><a href="memcache.getserverstatus.html" class="function" rel="rdfs-seeAlso">Memcache::getServerStatus()</a> - 用于获取一个服务器的在线/离线状态</span></li>
   </ul>
  </p>
 </div>


</div></div></div></body></html>